iT邦幫忙

2021 iThome 鐵人賽

DAY 4
1

一樣先上圖
https://ithelp.ithome.com.tw/upload/images/20210910/20118647LfV6MflG4y.png
今天我們要處理的是Sign,在文件中或在看到產出規則,可以看到Hash為永豐金提供,
Nonce我們已經透過api取得,因此接下來我們要處理HashID的部份。

https://ithelp.ithome.com.tw/upload/images/20210910/201186475cO10Xa7bO.png

5.4.2. Hash ID 計算Hash ID 是透過位元運算(XOR)將四組 Hash 計算產出的,
將 A1/A2 以 XOR 運算所得的字串,再與 B1/B2 以 XOR 運算出來的字串,
二個相加後將英文轉換為大寫,為長度為 32 的字串(例: 17D8E6558DC60E702A6B57E1B9B7060D。

$hash = [
    'A1' => '4D9709D699CA40EE',
    'A2' => '5A4FEF83140C4E9E',
    'B1' => 'BC74301945134CB4',
    'B2' => '961F67F8FCA44AB9'
];
//取得 Hash ID 計算方法
function getHashID($hash){
    $Byte_A1 = strToHexBytes($hash["A1"]);
    $Byte_A2 = strToHexBytes($hash["A2"]);
    $Byte_B1 = strToHexBytes($hash["B1"]);
    $Byte_B2 = strToHexBytes($hash["B2"]);
    
    $XOR1 = setXOR($Byte_A1, $Byte_A2);
    //echo hexBytesToString($XOR1)   17D8E6558DC60E70
    $XOR2 = setXOR($Byte_B1, $Byte_B2);
    //echo hexBytesToString($XOR1)   2A6B57E1B9B7060D
    $result = hexBytesToString($XOR1).hexBytesToString($XOR2);

    return $result;
}

其中strToHexBytes、setXOR、hexBytesToString會於範例檔中看到,
這邊個人認為學習成本很高...,如果不看code直接看文件要產出有一定難度,
須先了解xor運算的一些規範,請參考
https://www.php.net/manual/en/language.operators.bitwise.php

這邊講一下大概流程,先對將hash(a1,a2,b1,b2)轉16位元,
然後按造文件流程在進行xor運算,最後在轉回字串進行組合,
最後就會取得最後的HashID,不過文件中是先將字串相加在轉英文大寫,
但範例code裡面是先轉英文大寫在相加,雖然結果是一樣,
但有些人可能會覺得很奇怪,這邊提醒一下有該情況。

這邊可能會有些人覺得難以理解,個人建議這種金融加密的部份,本來規則就很複雜,
通常都是直接透過金流端提供的範例以及類sdk工具包來處理,來確保安全性,
因此我們只要了結流程跟會使用即可。


整個基礎流程到HashID終於快一半了,接下來我們會透過前幾天的內容組合出api
所需要的內容,將前幾天的東西串起來得感覺還是不錯的。


上一篇
Day03 永豐金API 基礎流程 -- Nonce
下一篇
Day05 永豐金API 基礎流程 -- Sign
系列文
掌握訂單與線上金流的剪不斷理還亂30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言